Computers continue to expand outward from their origins in temperature-controlled data centers, to room-size mainframes, to desktop personal computers, to laptops, and on to portable devices such as personal digital assistants (PDAs) and smartphones. The ever-decreasing size of computers creates a challenge for computer designers and for software developers seeking to develop operating systems for the computers and programs to run on the computers. Even as the size of the devices shrink, the demands of computer users have increased, so that people expect their cellular telephones to play audio and video, and to carry out all sorts of additional functions—often at the same time.
Each such application requires computer memory to run however, the smaller a device is, the less memory it typically can have. Thus, a computer may run out of memory when it is executing multiple applications simultaneously. Such a memory overflow condition can sometimes cause the computer to crash. Memory management techniques commonly employed by desktop computers, laptops, and the like are generally unsuitable for their less powerful portable counterparts. For example, the virtual memory management systems commonly used in a desktop computing system require numerous read and write operations from and to the system's hard drive. Portable devices often rely on flash memory that is ill-suited for frequent write operations and is often too small for use in a virtual memory management system. Desktop computing systems may also rely on the user to manage applications running the system; e.g., the user often closes unnecessary applications or applications that consume too much memory. However, user memory management is often undesirable for portable computing devices. The exemplary systems and methods manage memory on portable computing devices without using virtual memory or requiring the user to participate in memory management. Memory management in the exemplary systems is often transparent to the user because, in some implementations, every application may appear to be running, when, in fact, one or more of the applications may have been terminated. In an illustrative example, the operating system may close one or more applications when memory is needed. If a user wants to interact with a terminated application, the operating system may revive the application using saved state information.